#include <iostream>
#include <vector>
#include <algorithm>

class Solution {
public:
    std::vector<std::vector<int>> merge(std::vector<std::vector<int>>& intervals) {
        if(intervals.size() == 0)
            return {};
        
        //按照数组的第一个数进行排序
        sort(intervals.begin(), intervals.end());

        std::vector<std::vector<int>> ret;
        for(int i = 0; i < intervals.size(); i++)
        {
            int left = intervals[i][0];
            int right = intervals[i][1];
            //当数组为空的时候，或者是区间的开头大于上一个区间的末尾的时候，不需要合并，直接插入即可
            if(ret.empty() || ret.back()[1] <left)
            {
                ret.push_back({left, right});
            }
            //合并
            else
            {   
                ret.back()[1] = std::max(ret.back()[1], right);
            }
        }
        return ret;
    }
};

// sort对于二维数组的排序，会按照数组的字典序就行排序，按顺序比较，相同则继续比较下一个数字，直到分出来两个数组的大小
// back接口的返回值是引用类型